class Anasint extends Parser;
options {importVocab=Analex;}
	entrada : (definicion)* (variables)? match (funcion)*;
	definicion: ID (LBRACKET rango RBRACKET (ASTERISCO|MAS|OPCIONAL)?)+ ;
	rango: (ID | NUMERO) (MENOS (ID | NUMERO))+;
	variables: PORCENTAJE LLAVEL ((INT | CHAR | VOID) ID SEPARADOR)* PORCENTAJE LLAVER;
	match: DOBLEPORCENTAJE (reglas)* DOBLEPORCENTAJE;
	reglas: (regla)+ accion;
	accion: sentencia;
	regla: (conjunto (OR regla|ASTERISCO|MAS|OPCIONAL)? | (LPARENTESIS regla RPARENTESIS (ASTERISCO|MAS|OPCIONAL)?));
	conjunto: (LLAVEL (ID | NUMERO) LLAVER) | STRING | CARACTER | (LBRACKET rango RBRACKET)+;
	funcion: (INT | CHAR | VOID) ID LPARENTESIS argumentos RPARENTESIS LLAVEL (sentencia)* LLAVER;
	argumentos: argumento (COMA argumento)*;
	argumento: (INT | CHAR | VOID) (ASTERISCO)? (ID (LBRACKET RBRACKET)?)?;
	sentencia: ((RETURN (NUMERO|ID)) | (ID operacion)) SEPARADOR;
	operacion: asignacion | llamada | incremento;
	asignacion: ASIGNACION (NUMERO | ID llamada);
	llamada: LPARENTESIS (parametros)? RPARENTESIS;
	parametros: parametro (COMA parametro)*;
	parametro: (ID ((LBRACKET NUMERO RBRACKET)|(LPARENTESIS (parametros)? RPARENTESIS))?) | STRING;
	incremento: DOBLEMAS;
	